﻿using Ecopsy.DataTier;
using SqlLibrary;
using System.Collections.Generic;
using System;
using System.Linq;
using System.ComponentModel;

namespace AgencyEntityLib.BaseEntity
{
    
    

    public class Filter : EntitySingle
    {
        
        public enum FilterType:int { SurfaceList, EmployeeList, TaskList, ClientList, ContactFaces ,ConstractionsList, Contractlist}

        private ListWhere _Value= null;
        public ListWhere Value { get { return _Value; } set { _Value = value; } }

        public string Describe { get; set; }
        public string Name { get; set; }
                   
        public FilterType FilterTypeVal { get; set; }

        [DefaultValue ("")]   
        public string AddKey { get; set; }

        /// <summary>
        /// Принадлежность к странице
        /// </summary>
        public string SiteMapItem_Key{get;set;}
        
        /// <summary>
        /// Дополнительная категория фильта - к примеру значение CategoryId для списка рек. носителей
        /// Либо Id - коллекции сторон. 
        /// </summary>
        public string InList_Key{get;set;}
        
        
    }

    public class FilterList : EntityList
    {
        /// <summary>
        /// Берет часть списка в ид которых соотв ключ контрола и дополнительной части ключа 
        /// Как пример:  iFrameAdmin_Constractions+CategoryId+GUID
        /// </summary>
        /// <param name="PageKey"></param>
        /// <param name="AddKey"></param>
        /// <returns></returns>
        public Filter[] GetFilterList(Filter.FilterType fType, string AddKey)
        {
            this.Reset();            
            
            var r=
                from n in this.ToArray <Filter>()                
                where n.FilterTypeVal==fType && n.AddKey==AddKey
                orderby n.Name 
         
            select n;
             
             return r.ToArray <Filter>() ;
        }
        public override void Add(object obj)
        {
             
            Filter ff=(Filter)obj;
            foreach (Filter item in this)
            {
                CacheTools.ResetCache(item.Value.ListLoadStatment.ID);
                //if (item.Value.ListLoadStatment.ID  == ff.Value.ListLoadStatment.ID)
                //{
                //    string s;
                //}
            }
            base.Add(obj);
        }
    }
}


